package com.ywgt;

import java.util.Arrays;

/**
 * 8皇后问题
 */
public class Queen8 {
    static int [] map=new int[8];
    static int count=0;
    public static void main(String[] args) {
        walk(0);
        System.out.println(count);
    }

    /**
     * 第n个皇后
     * @param n
     */
    public static void walk(int n){
        if(n==8){
            print();
            count++;
            return;
        }
        for (int i = 0; i < map.length; i++) {
            //将皇后放到第一个位置 如果位置冲突 就放到下一列 如果不冲突放下一个皇后
               map[n]=i;
               if(check(n)){
                   walk(n+1);
               }
        }
    }

    /**
     * 检查第n个皇后的位置是否合适
     * @param n
     * @return
     */
    public static boolean check(int n){
       for(int i=0;i<n;i++){
           //如果在同一列 或者同一条斜线上
            if(map[i]==map[n]||Math.abs(i-n)==Math.abs(map[i]-map[n])){
                return false;
            }

       }
        return true;
    }


    public static void print(){
        System.out.println(Arrays.toString(map));
    }
}
